/**************************************************************************************
*
*	Copyright (C) 2009 - 2012 Brent Andrew O. Chua - See LICENSE.txt for more info.
*		
*	Filename	-	RenderEntryModel.h
*
*	Description -	
*
*	Comments	-	
*
*	Modification History:
*			Name			   Date					Description
*			MrCodeSushi	-	10/09/2012	-	Creation of this file
**************************************************************************************/
#ifndef _PSX_RENDER_ENTRY_MAIN_H_
#define _PSX_RENDER_ENTRY_MAIN_H_

#include "PulseSTD.h"
#include "GraphicsTypes.h"
#include "RenderEntry.h"
#include "Geometry.h"
#include "InputLayout.h"
#include "VertexBuffer.h"
#include "RenderPass.h"
#include "ParameterContainer.h"
#include "ParameterMatrix.h"
#include "Array.h"

namespace Pulse
{
	class RenderEntryModel : public RenderEntry
	{
	public:

		RenderEntryModel( void );

		virtual ~RenderEntryModel( void );

		void SetWorldTransformRef( const Matrix4x4 *pWorld );

		virtual void PreExecute( GraphicsPipeline *pPipeline );

		virtual void Execute( GraphicsPipeline *pPipeline );

		virtual void PostExecute( GraphicsPipeline *pPipeline );

	public:

		//void BindParameters( void ); // What is this?

	public:

		typedef Array<ParameterContainer*> ParameterContainerList;

		ParameterContainerList		m_params;
		ETopology::Type				m_topology;
		ParameterMatrix				*pParamWorld;
		ParameterMatrix				*pParamView;
		ParameterMatrix				*pParamProjection;
		ParameterMatrix				*pParamWorldView;
		ParameterMatrix				*pParamWorldViewProj;
		const RenderPassRenderInfo	*m_pGeoRenderInfo;
		IndexBuffer					*m_pIndexBuffer;
		const GeometrySubset		*m_pGeoSubset;
		RenderPass					*m_pRenderPass;
		
	};
}

#endif /* _PSX_RENDER_ENTRY_MAIN_H_ */